﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Noris.Tools.TraceVisualiser.TraceData;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Components;

namespace Noris.Tools.TraceVisualiser.Forms
{
	public partial class ColorSettingsForm : Form
	{
		public ColorSettingsForm()
		{
			InitializeComponent();
			this.OkStornoPanel.OkClick += new EventHandler(OkStornoPanel_OkClick);
			// this.ValuesToVisual();
		}
		void OkStornoPanel_OkClick(object sender, EventArgs e)
		{
			this.ValuesToData();
			this.DialogResult = System.Windows.Forms.DialogResult.OK;
			this.Close();
		}
		/// <summary>
		/// Událost po potvrzení dat v okně konfigurace
		/// </summary>
		public event EventHandler SettingsChanged;
		/// <summary>
		/// Barevná skupina. Je nutno zadat po vytvoření instance Formu, ale před jeho zobrazením ShowDialog().
		/// Po zadání si Form načte z cache objekt TraceColors a z něj zajistí zobrazení subsetu pro danou ColorGroup.
		/// </summary>
		public string SettingColorGroup
		{
			get { return this._SettingColorGroup; }
			set
			{
				this.ValuesToVisual(value);
			}
		}
		private string _SettingColorGroup;
		/// <summary>
		/// Vyvolá event SettingsChanged
		/// </summary>
		protected virtual void OnSettingsChanged()
		{
			if (this.SettingsChanged != null)
				this.SettingsChanged(this, EventArgs.Empty);
		}
		#region Persistence hodnot
		/// <summary>
		/// Hodnoty z paměti uloží do vizuálních dat formuláře
		/// </summary>
		protected void ValuesToVisual(string colorGroup)
		{
			this._SettingColorGroup = colorGroup;
			this.Text = "Nastavení barev pro klíč: " + colorGroup;
			TraceColors traceColors = (TraceColors)Steward.GetFromCache(typeof(TraceColors));  // Reference na živý unikátní objekt TraceColors
			this.ColorList = traceColors.ColorListClone.GetSubset(colorGroup);                 // TraceColors vydá svoje data (klon) do editoru
			this.ColorList.FillGridView(this._ColorListGrid, true);
		}
		/// <summary>
		/// Vizuální hodnoty (aktuálně zobrazené) uloží do objektu do paměti.
		/// </summary>
		protected void ValuesToData()
		{
			TraceColors traceColors = (TraceColors)Steward.GetFromCache(typeof(TraceColors));  // Reference na živý unikátní objekt TraceColors
			traceColors.ColorList.AppendSubset(this.ColorList, TraceVisualiser.Components.ColorList.AppendMode.Merge, TraceVisualiser.Components.ColorList.AppendMode.Replace);
            traceColors.ColorList.PresetSaveConfig();
			this.OnSettingsChanged();
		}
		/// <summary>
		/// Obsahuje izolovaný klon objektu ColorList, vyzvednutý z cache objektu TraceColors.
		/// Na začátku editace se vyzvedne, uloží sem a zviditelní v this._ColorListGrid.
		/// V průběhu editace se tento objekt edituje.
		/// Po ukončení editace (OK) se tento objekt vloží nazpět do cache objektu TraceColors.
		/// </summary>
		private ColorList ColorList;
		#endregion
	}
}
